package qc.module.qms.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.common.core.unify.QCUnifyReturnValue;
import qc.module.qms.entity.QmsStationMaintenance;
import qc.module.qms.repository.QmsStationMaintenanceRepository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 站点检修维护记录Service
 *
 * @author QuCheng Tech
 * @since 2025/10/12
 */
@Service
public class QmsStationMaintenanceService {
    private static final Logger logger = LoggerFactory.getLogger(QmsStationMaintenanceService.class);

    @Autowired
    private QmsStationMaintenanceRepository repository;

    /**
     * 查询指定站点时间段内的标记数据为测试记录的检修维护记录
     *
     * @param stcd      站点编码
     * @param beginTime 起始时间
     * @param endTime   截止时间
     * @return java.util.List<qc.module.qms.entity.QmsStationMaintenance>
     * @author QuCheng Tech
     * @since 2025/10/12
     */
    public List<QmsStationMaintenance> queryStationIsTestDataRecords(String stcd, LocalDateTime beginTime, LocalDateTime endTime) {
        //查询条件错误不进行查询
        if (StringUtils.isNotBlank(stcd) && beginTime != null && endTime != null && beginTime.isAfter(endTime) == false) {
            LambdaQueryWrapper<QmsStationMaintenance> wrapper = new LambdaQueryWrapper<>();
            //方法提供给原始数据处理中判断站点数据是否判定为测试数据使用，只需要查询记录ID、标题、工作起止时间，其他字段不查询
            wrapper.select(QmsStationMaintenance::getId, QmsStationMaintenance::getTitle, QmsStationMaintenance::getBegintm, QmsStationMaintenance::getEndtm);

            //查询条件
            //站点编码相等、删除标记=false、标记为测试数据=true、包含传入的时间段
            wrapper.eq(QmsStationMaintenance::getStcd, stcd);
            wrapper.eq(QmsStationMaintenance::getIstest, true);
            wrapper.eq(QmsStationMaintenance::getDeleted, false);
            //时间段判断条件：工作开始时间≤传入截止时间，工作结束时间为null或者工作结束时间≥传入开始时间
            wrapper.le(QmsStationMaintenance::getBegintm, endTime);
            wrapper.and(q -> {
                q.isNull(QmsStationMaintenance::getEndtm).or()
                        .ge(QmsStationMaintenance::getEndtm, beginTime);
            });

            //排序，按工作开始时间asc
            wrapper.orderByAsc(QmsStationMaintenance::getBegintm);

            //查询数据
            return repository.selectList(wrapper);
        }

        return null;
    }

    public String add() {
        return QCUnifyReturnValue.Success();
    }

    public String update() {
        //修改和设置工作完成
        return QCUnifyReturnValue.Success();
    }

    public String delete() {
        //删除时对删除标记进行修改，已删除的不能恢复
        return QCUnifyReturnValue.Success();
    }
}
